# 对龙果项目进行ui自动化测试
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
import os
class Base:
    # 初始化驱动
    def __init__(self,driver):
        self.driver = driver
    # 封装打开网址的的方法
    def open_url(self,url):
        self.driver.get(url)
    # 封装截图的方法
    def screenshot(self, name):
        sj = time.strftime('%Y%m%d%H%M%S', time.localtime())
        current_dir = os.path.dirname(os.path.abspath(__file__))
        png_dir = os.path.join(current_dir, '../Png')
        # 确保目录存在，不存在就创建（避免保存时报错）
        os.makedirs(png_dir, exist_ok=True)
        file_path = os.path.join(png_dir, name+sj+'.png')
        self.driver.save_screenshot(file_path)

    # 封装定位的方法
    def find_element(self, loc):
        try:
            WebDriverWait(self.driver, 20, 0.5).until(lambda driver: driver.find_element(*loc).is_displayed())
            return self.driver.find_element(*loc)
        except Exception as e:
            # 调用截图命名方法
            self.screenshot('x')
            print(e)

    # 封装点击事件的方法
    def click(self, loc):
        self.find_element(loc).click()

    # 封装键盘输入事件的方法
    def send_keys(self, loc, text):
        self.find_element(loc).send_keys(text)

    # 封装悬停事件的方法
    def move_to_element(self, loc):
        ActionChains(self.driver).move_to_element(self.find_element(loc)).perform()

    # 多窗口切换
    def new_window(self):
        self.driver.switch_to.window(self.driver.window_handles[-1])

    # 滚动到任意像素
    def scrollTo(self, x):
        self.driver.execute_script(f'window.scrollTo(0,{x})')

    # 滚动到底部
    def scrollTo_height(self):
        self.driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')

    # 封装回车事件的方法
    def keys_Enter(self, loc):
        self.find_element(loc).send_keys(Keys.ENTER)
        # self.send_keys(loc, Keys.ENTER)

    # 封装下拉菜单-index的方法
    def select_index(self, loc, x):
        index = Select(self.find_element(loc))
        index.select_by_index(x)

    # 封装下拉菜单-value的方法
    def select_value(self, loc, x):
        value = Select(self.find_element(loc))
        value.select_by_value(x)

    # 封装下拉菜单-visible_text的方法
    def select_visible_text(self, loc, x):
        visible_text = Select(self.find_element(loc))
        visible_text.select_by_visible_text(x)

    # 封装弹窗-alert的方法
    def alert_accept(self):
        alert = self.driver.switch_to.alert
        alert.accept()

    # 封装一个获取alter_text的方法
    def alter_text(self):
        return self.driver.switch_to.alert.text

    # 封装frame框架的方法
    def frame(self, loc):
        self.driver.switch_to.frame(self.find_element(loc))

    # 封装退出frame框架的方法
    def default_content(self):
        self.driver.switch_to.default_content()

    # 获取信息

    def get_location_text(self,loc):
        return self.find_element(loc).text



